package com.atguigu.spring.listener;

import org.springframework.context.PayloadApplicationEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

/**
 * 事件监听器；为什么一个注解就能监听来事件。。。。。
 * DataSource。TransationManager（切面） === DBService
 * @EnableTransationManager
 * @author mi
 * @time 2021/4/19 0:51
 */
@Component
public class AppEventListener {
	public AppEventListener(){
		System.out.println("AppEventListener...");
	}

	/**
	 * 感知MessageEvent对象事件
	 * @param event
	 */
	@EventListener(MessageEvent.class)
	public void listenMessage(MessageEvent event){
		System.out.println("Message事件到达..."+event+"；已发送邮件....");
	}

	/**
	 * 感知ChangeEvent对象事件
	 * @param event
	 */
	@EventListener(ChangeEvent.class)
	public void listenChange(ChangeEvent event){
		System.out.println("Change事件到达..."+event+"；已同步状态....");
	}

	/**
	 * 如果是任意对象事件，则会被装成PayloadApplicationEvent事件
	 * @param event
	 */
	@EventListener(PayloadApplicationEvent.class)
	public void listenPayload(PayloadApplicationEvent<A> event){
		System.out.println("Payload事件到达..."+event.getPayload()+";已进行处理....");
	}
}
